<?php
// +----------------------------------------------------------------------
// | Name 风音框架
// +----------------------------------------------------------------------
// | Author 唐启云 <tqy@fxri.net>
// +----------------------------------------------------------------------
// | Copyright Copyright © 2016-2099 方弦研究所. All rights reserved.
// +----------------------------------------------------------------------
// | Link https://www.fxri.net
// +----------------------------------------------------------------------

namespace fxsafe\facade;

/**
 * 基础类
 */
class Base
{
    /**
     * 加载文件
     * @param string $file 路径
     * @param string $type 类型
     * @return boolean
     */
    public function load($file, $type = null)
    {
        static $_file = [];
        $file = realpath($file);
        if (!isset($_file[$file])) {
            if (!is_file($file)) {
                $_file[$file] = false;
            } else if ($type == 'data') {
                $_file[$file] = require $file;
            } else {
                require $file;
                $_file[$file] = true;
            }
        }
        return $_file[$file];
    }

    /**
     * 配置参数-[获取|设置]
     * @param array $vars 参数
     * @return mixed
     */
    public function config()
    {
        // 初始化变量
        $vars = func_get_args();
        $vars[0] = isset($vars[0]) ? $vars[0] : null;
        if (!is_array($vars[0]) && !array_key_exists(1, $vars)) {
            return 0 === strpos($vars[0], '?') ? \fxsafe\Config::has(substr($vars[0], 1)) : \fxsafe\Config::get($vars[0]);
        } else {
            $vars[1] = isset($vars[1]) ? $vars[1] : null;
            return \fxsafe\Config::set($vars[0], $vars[1]);
        }
    }

    /**
     * 浏览器友好的变量输出
     * @param array $vars 要输出的变量
     * @return void
     */
    public function dump()
    {
        // 初始化变量
        $vars = func_get_args();
        // 提取数据
        ob_start();
        call_user_func_array('var_dump', $vars);
        $output = ob_get_clean();
        $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
        // 处理数据
        if (PHP_SAPI == 'cli') {
            $output = PHP_EOL . $output . PHP_EOL;
        } else {
            if (!extension_loaded('xdebug')) {
                $output = htmlspecialchars($output, ENT_SUBSTITUTE);
            }
            $output = '<pre>' . $output . '</pre>';
        }
        // 输出数据
        echo $output;
    }

    /**
     * 解析Json
     * @param mixed $data 数据
     * @param string $type 类型
     * @param mixed $param 参数
     * @return mixed
     */
    public function json($data, $type, $param = null)
    {
        // 初始化变量
        $type = strtolower($type);
        switch ($type) {
            case 'encode':
                // 编码
                if (!is_json($data)) {
                    $data = \fxsafe\Param::json($data, $type, $param);
                }
                break;
            case 'decode':
                // 解码
                if (is_json($data)) {
                    $data = \fxsafe\Param::json($data, $type, $param);
                } else if (is_object($data)) {
                    $data = (array) $data;
                } else if (is_string($data)) {
                    $data = \fxsafe\Text::strDecode($data);
                } else if (!is_array($data)) {
                    $data = !is_null($data) ? [$data] : [];
                }
                break;
        }
        return $data;
    }

    /**
     * 解析IPv4
     * @param mixed $data 数据
     * @param string $type 类型
     * @return mixed
     */
    public function ipv4($data, $type)
    {
        // 初始化变量
        $type = strtolower($type);
        switch ($type) {
            case 'encode':
                // 编码
                if (is_ipv4($data)) {
                    $data = \fxsafe\Text::ipv4($data, $type);
                }
                break;
            case 'decode':
                // 解码
                if (!is_ipv4($data)) {
                    $data = \fxsafe\Text::ipv4($data, $type);
                }
                break;
        }
        return $data;
    }
}
